Nachdem wir nun den groben Aufbau eines Dateisystems kennengelernt haben, wollen wir uns nun anschauen,
welche Schnittstellen uns zur Verfügung stehen, um auf das Dateisystem zuzugreifen.
Auf der einen Seite haben wir den STAT bzw. den LSTAT Systemaufruf.
Mit diesem Aufruf können wir uns die Dateiatribute aus dem Einwalt geben lassen.
Der Unterschied zwischen den beiden Aufrufen STAT und LSTAT ist, dass wenn man STAT auf
einen symbolischen Link aufruft, der Aufruf STAT die Information über das Ziel des Links
sucht, während der Aufruf LSTAT Informationen über den symbolischen Link selbst geben würde.
Die Prototypen der beiden Funktionen sind ansonsten identisch.
Das erste Argument ist der Pfad zu der jeweiligen Datei bzw. dem Verzeichnis.
Das zweite Argument ist ein Speicherbereich.
Die Information wird dabei in etwas vom Typ Strukturstatt gespeichert.
Innerhalb eines Strukturstatt stehen viele Informationen.
Für SP brauchen wir an der Stelle aber nur zwei der Strukturmitglieder.
Einmal das Mitglied STSize, was die Größe der Datei beschreibt, und das Strukturmitglied
STMode, mit dem die Zugriffsrechte ausgelesen werden können.
Da innerhalb des STMode-Felds mehrere Rechte in Form von Bits encodiert sind, kann man
darauf mit einigen Makros zugreifen.
Zum Beispiel kann man das Makro S is REC aufrufen, um zu prüfen, ob in dem STMode-Feld der Indikator
für eine reguläre Datei gesetzt ist.
Analog dazu kann man die Makros S is DIR und S is LINK verwenden, um zu prüfen, ob der
STMode ein Verzeichnis bzw. eine symbolische Verknüpfung bezeichnet.
Damit wissen wir nun, wie wir Informationen zu einer Datei finden, über deren Existenz
und Namen wir bereits Informationen haben.
Wenn wir nun aber Dateien in einem Dateisystem suchen wollen, von denen wir entweder nicht
den genauen Pfad wissen oder uns generell einen Überblick über alle Dateien verschaffen
wollen, dann reicht dies noch nicht.
Stattdessen brauchen wir nun ein Hilfsmittel, um herauszufinden, in was für Dateien sich
in einem Verzeichnis befinden.
Dafür gibt es den Aufruf OpenDIR in Kombination mit ReadDIR und CloseDIR.
Mit OpenDIR kann man ein Verzeichnis öffnen und erhält als Ergebnis einen Interator, mit
dem man über alle Einträge des Verzeichnisses iterieren kann.
Das Argument der OpenDIR-Funktion ist an der Stelle ein Verzeichnispfad.
Der Rückgabewert ist eben ein Zeiger auf den Interator.
Dieser muss anschließend wieder mit dem Aufruf CloseDIR freigegeben werden.
Auf diesem Interator können wir nun mit der Funktion ReadDIR arbeiten und uns damit die
einzelnen Einträge geben lassen.
Sobald wir ReadDIR aufrufen, bekommen wir ein Zeiger auf den jeweiligen Eintrag und
der Interator wird um einen Eintrag weiterversetzt.
Abhängig vom Rückgabewert der ReadDIR-Funktion wissen wir, dass entweder ein Fehler aufgedreht
ist oder dass keine weiteren Einträge mehr vorliegen.
In beiden Fällen ist der Rückgabewert Null.
Um nun zu prüfen, welcher der beiden Fälle vorliegt, muss man die Erno mit beachten.
Nämlich verändert der ReadDIR-Aufruf nur dann die Erno, wenn tatsächlich ein Fehler
aufgetreten ist.
Also müssen wir vor Aufruf der ReadDIR-Funktion die Erno auf Null setzen, um anschließend,
falls der Rückgabewert der ReadDIR-Funktion Null ist, zu prüfen, ob die Erno noch immer
Null ist.
Abhängig davon wissen wir, ob ein Fehler aufgetreten ist oder einfach keine weiteren
Dateien mehr im Verzeichnis sind.
Der Grund, dass wir die Erno auf Null setzen, ist, dass per Spezifikation keine Biblioteks plugging
Zugänglich über
Offener Zugang
Dauer
00:07:45 Min
Aufnahmedatum
2020-07-21
Hochgeladen am
2020-07-21 12:46:20
Sprache
de-DE